#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
	int pipefdTest[2];
	char strBuff[1024] = {0};
	int iCnt = 0;
	int iRet = 0;

	iRet = pipe( pipefdTest );
	if( iRet == -1 )
	{
		perror( "fail pipe in 01_pipe.c" );
		return -1;
	}

// pipe缓存区写满之后, 写入阻塞

	while( 1 )
	{
		iRet = write( pipefdTest[1], "A", 1 );
		iCnt += iRet;
		printf( "Total Write #%d bytes\n", iCnt );		
/*
		if( iCnt == 65535 )
		{
			iRet = read( pipefdTest[0], strBuff, 1 );
			printf( "Read #%d bytes\n", iRet ); 
			iCnt--;
			sleep(2);			
		}
*/
	}

	 
	return 0;
}




/*
pipe()
wirte()
read()
close()

标号0 PipeRead
标号1 PipeWrite

PipeWrite  PipeRead  操作   结果

至少一个	至少一个    写    如果缓存区没有写满, 直接写入
                           如果缓存区已经写满, 阻塞等待直到有数据读出

至少一个    至少一个    读    如果缓存区有数据,   直接读出
                           如果缓存区没有数据, 阻塞等待直到有数据写入

至少一个    0          写    管道立刻破裂, 产生管道破裂信号SIGPIPE, 进程异常结束

0          至少一个    读    如果缓存区有数据, 直接读出
                           如果缓存区没有数据, 不会阻塞等待, 直接返回读到0个数据



*/